﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using sys = Cosmos.System;

namespace ArkadiaOsKernel.Core.Shell
{
    class Command
    {
        public void com()
        {
            Core.Filesystem.Vfs.Disk vfs = new Core.Filesystem.Vfs.Disk("C");
            Core.Filesystem.Fat.DirectoryFat df = new Core.Filesystem.Fat.DirectoryFat();
            var ramcap = Cosmos.Core.CPU.GetAmountOfRAM();
            string ramget = (ramcap + 2).ToString();
            Console.ForegroundColor = ConsoleColor.White;
            Console.Write("C: > ");
            var com = Console.ReadLine();
            if (com == "help")
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("------Commande---------------Description-------------------------------------");
                Console.WriteLine("-- help           -- Affiche l'aide des commandes.                         --");
                Console.WriteLine("-- gui            -- Demarre l'interface graphique.                        --");
                Console.WriteLine("-- redem          -- Redemarre l'ordinateur.                               --");
                Console.WriteLine("-- cfichier       -- Creer un fichier.                                     --");
                Console.WriteLine("-- rfichier       -- Lis un fichier.                                       --");
                Console.WriteLine("-- ram            -- Montre combien l'ordinateur dispose de memoire ram.   --");
                Console.WriteLine("-- vide           -- Vide l'ecran.                                         --");
                Console.WriteLine("-- ListFS         -- Affiche les dossiers et fichiers du disque dur.       --");
                Console.WriteLine("-----------------------------------------------------------------------------");
                Console.ForegroundColor = ConsoleColor.White;
            }
            else if (com == "redem")
            {
                Cosmos.Core.Global.CPU.Reboot();
            }
            else if (com == "mdossier")
            {
                Console.Write("Le nom de votre dossier : ");
                var ndir = Console.ReadLine();
                try
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("La creation du dossier " + ndir + " est en cours...");
                    df.addDirectory(ndir);
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("La creation du dossier " + ndir + " est bien effectue !");
                    Console.ForegroundColor = ConsoleColor.White;

                }
                catch
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Impossible de creer le dossier !");
                    Console.ForegroundColor = ConsoleColor.White;
                }
            }
            else if (com == "cfichier")
            {
                Console.ForegroundColor = ConsoleColor.Magenta;
                Console.Write("Le nom de votre fichier : ");
                Console.ForegroundColor = ConsoleColor.Green;
                var nom = Console.ReadLine();
                Console.ForegroundColor = ConsoleColor.Magenta;
                Console.Write("L'extention de votre fichier sans le '.' : ");
                Console.ForegroundColor = ConsoleColor.Green;
                var type = Console.ReadLine();
                Console.ForegroundColor = ConsoleColor.Magenta;
                Console.Write("Données : ");
                Console.ForegroundColor = ConsoleColor.White;
                var donnée = Console.ReadLine();
                Console.ForegroundColor = ConsoleColor.Magenta;
                Console.Write("Description : ");
                Console.ForegroundColor = ConsoleColor.Green;
                var description = Console.ReadLine();
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Creation du fichier en cours ...");
                Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").AddFile(nom, donnée, "." + type, description);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Creation du fichier " + nom + " a reussi !!");
            }
            else if (com == "rfichier")
            {
                try
                {
                    for (int i = 0; i < Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").GetFiles(); i++)
                    {
                        string data = Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].data;
                        Console.Write("Le nom du fichier : ");
                        var rf = Console.ReadLine();
                        Console.WriteLine(Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").GetFileContents(rf));
                        return;
                    }
                }
                catch
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Le fichier est introuvable !!");
                }
            }
            else if (com == "ListFS")
            {

                Console.ForegroundColor = ConsoleColor.Blue;
                for (int i = 0; i < Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").GetFiles(); i++)
                {
                    string data = Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].data;
                    if (Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].filetype == ".txt")
                    {
                        Console.WriteLine("Id : " + i + " -  " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].name + " - " + "Fichier texte" + " - " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].description);
                    }
                    else if (Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].filetype == ".Asharp")
                    {
                        Console.WriteLine("Id : " + i + " -  " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].name + " - " + "Fichier de code Asharp" + " - " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].description);
                    }
                    else if (Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].filetype == ".app")
                    {
                        Console.WriteLine("Id : " + i + " -  " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].name + " - " + "Application Asharp" + " - " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].description);
                    }
                    else
                    {
                        Console.WriteLine("Id : " + i + " -  " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].name + " - " + "Autre fichier" + " - " + Core.Filesystem.Vfs.HardDrive.Drive.GetDisk("C").files[i].description);
                    }
                }
            }

            else if (com == "vide")
            {
                Console.Clear();
            }
            else if (com == "gui")
            {
                Interface.Screen.SetDriver(Core.Interface.Screen.Driver.VMWareSVGA);
                Interface.Screen.SetMode(Core.Interface.Screen.Resolutions.Resolution3_800);
                Interface.Screen.Clear(0x006400);
                Interface.Images.test2.Draw();

            }
            else if (com == "ram")
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("L'ordinateur dispose de " + ramget + " mo de ram.");
                Console.ForegroundColor = ConsoleColor.White;
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("La commande " + com + " est incorrecte !");
                Console.ForegroundColor = ConsoleColor.White;
            }
        }
    }
}
